package com.turing.post.tuxedo.util;

import java.io.Serializable;
import java.math.BigInteger;
import java.util.Date;

import org.jdom2.Element;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSUtil;

/**
 * 支付撤销输入
 * 
 * @author yxb
 * 
 */
@SuppressWarnings("serial")
public class IPaidCancel extends TransRequest implements Serializable {
	/**
	 * 原交易日期
	 */
	public Date origTranDate = null;

	/**
	 * 原请求流水号
	 */
	public String origReqSeqNo = "";

	/**
	 * 原应答流水号
	 */
	public String origAckSeqNo = "";

	/**
	 * 合计发生额
	 */
	public BigInteger totalAmount = BigInteger.ZERO;

	/**
	 * 撤销/退货原因
	 */
	public String reason = "";

	/**
	 * 原卡号
	 */
	public String cardNo = "";

	/**
	 * 卡密码
	 */
	public String passwd = "";

	/**
	 * 产生计算MAC的域
	 */
	@Override
	protected void generateMacField() {
	}

	/**
	 * 解析交易请求私有报文体
	 * 
	 * @param reqBody
	 * @throws Exception
	 */
	@Override
	protected void parseReqBodyXml(Element reqBody)
			throws PCPSApplicationException {
		// 原交易日期
		String str = TransXmlHelper.getMandatoryString(reqBody,
				TransXmlHelper.XML_NODE_OrigTranDate);
		try {
			origTranDate = PCPSUtil.parsePackedYMDDateTime(str);
		} catch (Exception e) {
			ParaseException
					.TransParamException("无效的ORIGTRANDATE[" + str + "]!");
		}

		// 原请求流水号
		origReqSeqNo = TransXmlHelper.getMandatoryString(reqBody,
				TransXmlHelper.XML_NODE_OrigReqSeqNo);

		// 原应答流水号
		origAckSeqNo = TransXmlHelper.getMandatoryString(reqBody,
				TransXmlHelper.XML_NODE_OrigAckSeqNo);

		// 合计发生额
		totalAmount = TransXmlHelper.getInteger(reqBody,
				TransXmlHelper.XML_NODE_TotalAmount);

		// 撤销/退货原因
		reason = TransXmlHelper.getOptionalString(reqBody,
				TransXmlHelper.XML_NODE_Reason);

		// 卡号
		cardNo = TransXmlHelper.getOptionalString(reqBody,
				TransXmlHelper.XML_NODE_CardNo);

		// 密码
		passwd = TransXmlHelper.getOptionalString(reqBody,
				TransXmlHelper.XML_NODE_Passwd);
	}
}
